home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 79 / maccd 79.iso / multimedial / GL Tron / Source / gltron / gltron.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-07-20  |  11.3 KB  |  500 lines  |  [TEXT/CWIE]

  1. /*
  2.   gltron
  3.   Copyright (C) 1999 by Andreas Umbach <marvin@dataway.ch>
  4. */
  5.  
  6. #include <math.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9.  
  10. #ifndef GLTRON_H
  11. #define GLTRON_H
  12.  
  13. #define SEPERATOR '/'
  14. #define RC_NAME ".gltronrc"
  15. #define CURRENT_DIR "."
  16.  
  17. #ifndef M_PI
  18. #define M_PI 3.141592654
  19. #endif
  20. /* win32 additions by Jean-Bruno Richard <jean-bruno.richard@mg2.com> */
  21.  
  22. #ifdef WIN32
  23. #include <windows.h>
  24.  
  25. #undef SEPERATOR
  26. #define SEPERATOR '\\'
  27. #undef RC_NAME
  28. #define RC_NAME "gltron.ini"
  29. #define CURRENT_EQ_DATA_DIR 
  30.  
  31. #endif /* WIN32 */
  32.  
  33. /* FreeBSD additions by Andrey Zakhatov <andy@icc.surw.chel.su>  */
  34.  
  35. #ifdef __FreeBSD__
  36. #include <floatingpoint.h>
  37. #endif
  38.  
  39. /* MacOS additions by Stefan Buchholtz <sbuchholtz@online.de> */
  40.  
  41. #ifdef macintosh
  42. #include <string.h>
  43. #include <console.h>
  44. #undef SEPERATOR
  45. #define SEPERATOR ':'
  46. #undef RC_NAME
  47. #define RC_NAME "gltron.ini"
  48. #define CURRENT_EQ_DATA_DIR
  49. #undef CURRENT_DIR
  50. #define CURRENT_DIR ""
  51. #endif 
  52.  
  53. /* dropped support for anything else than libpng */
  54. #include "png_texture.h"
  55. #include <png.h>
  56. typedef png_texture texture;
  57. #define LOAD_TEX(x) load_png_texture(x)
  58. #define TEX_SUFFIX ".png"
  59.  
  60. #define COS(X)    cos( (X) * M_PI/180.0 )
  61. #define SIN(X)    sin( (X) * M_PI/180.0 )
  62.  
  63. /* data structures */
  64. #include "model.h"
  65. #include "data.h"
  66. #include "menu.h"
  67. #include "quad.h"
  68. #include "callbacks.h"
  69.  
  70. #include "system.h"
  71. #include "geom.h"
  72. #include "light.h"
  73.  
  74. /* rendering stuff */
  75. #include "renderer_gl.h"
  76.  
  77. /* resource management */
  78. #include "texture.h"
  79.  
  80. extern int game_textures;
  81. extern int n_textures;
  82. extern texture_info textures[];
  83.  
  84. /* artpack stuff */
  85.  
  86. extern void initArtpacks(void);
  87. extern void reloadArt(void);
  88.  
  89. /* graphics libs */
  90. #include <GL/gl.h>
  91.  
  92. /* do Sound */
  93. #ifdef SOUND
  94. #include "sound.h"
  95. #endif
  96.  
  97. /* use enums, not magic */
  98.  
  99. enum { 
  100.   AI_HUMAN = 0,
  101.   AI_COMPUTER = 1,
  102.   AI_NONE = 2
  103.   
  104. };
  105.  
  106. /* global constants */
  107.  
  108. /* physics recomputed every 10ms */
  109. #define PHYSICS_RATE 20
  110.  
  111. #define SONG_PREFIX "song_"
  112. #define MUSIC_DIR "music"
  113.  
  114. #define PATH_ART "art"
  115.  
  116. #define PLAYERS 4
  117. #define MAX_PLAYERS 4
  118. #define MAX_TRAIL 1000
  119.  
  120. #define B_HEIGHT 0
  121. #define TRAIL_HEIGHT 3.5
  122. #define CYCLE_HEIGHT 8
  123. #define WALL_H 12
  124.  
  125. #define CAM_TYPE_CIRCLING 0
  126. #define CAM_TYPE_FOLLOW 1
  127. #define CAM_TYPE_COCKPIT 2
  128. #define CAM_TYPE_MOUSE 3
  129.  
  130. #define CAM_COUNT 4
  131. #define CAM_CIRCLE_DIST 15
  132. #define CAM_CIRCLE_Z 8.0
  133.  
  134. #define CAM_FOLLOW_DIST 12
  135. #define CAM_FOLLOW_Z 6.0
  136. #define CAM_FOLLOW_SPEED 0.05
  137. #define CAM_FOLLOW_SPEED_FACTOR 1.0 / 82.0
  138. #define CAM_SPEED 2.0
  139.  
  140. #define CAM_COCKPIT_Z 3
  141.  
  142. #define CAM_R_MIN 2.0
  143. #define CAM_R_MAX 100
  144. #define CAM_CHI_MIN M_PI / 6
  145. #define CAM_CHI_MAX M_PI / 2 - M_PI / 6
  146.  
  147. #define MOUSE_ORIG_X 100
  148. #define MOUSE_ORIG_Y 100
  149. #define MOUSE_CX 0.003
  150. #define MOUSE_CY 0.003
  151.  
  152. #define TURN_LENGTH 200
  153.  
  154. #define EXP_RADIUS_MAX 30
  155. #define EXP_RADIUS_DELTA 0.01
  156.  
  157. /* these must be < 0 */
  158. #define SPEED_CRASHED -1
  159. #define SPEED_GONE -2
  160.  
  161. #define FAST_FINISH 40
  162.  
  163. #define DEBUG_TEX_W 64
  164. #define DEBUG_TEX_H 64
  165. /* when running as screen saver, wait SCREENSAVER_WAIT ms after each round */
  166.  
  167. #define SCREENSAVER_WAIT 2000
  168.  
  169. #define PAUSE_GAME_FINISHED 1
  170.  
  171. extern char** artpack_list;
  172. extern int artpack_index;
  173.  
  174. extern int gl_error;
  175.  
  176. extern char messages[80];
  177.  
  178. extern settings_int *si;
  179. extern int si_count;
  180. extern settings_float *sf;
  181. extern int sf_count;
  182. extern settings_v *sv;
  183. extern int sv_count;
  184.  
  185. extern Game main_game;
  186. extern Game *game;
  187. extern Game2 main_game2;
  188. extern Game2 *game2;
  189.  
  190. extern float camAngle;
  191. extern float cam_phi;
  192. extern float cam_chi;
  193. extern float cam_r;
  194.  
  195. #ifdef DEPTH_SORT
  196. extern int quadBufSize;
  197. extern Quad* quadBuf;
  198. extern int* quadBufIndex;
  199. #endif
  200.  
  201. /* extern TexFont *txf; */
  202. extern fonttex *gameFtx;
  203. extern fonttex *guiFtx;
  204. extern int fontID;
  205. #define MAX_FONTS 17
  206.  
  207. extern Menu** pMenuList;
  208. extern Menu* pRootMenu;
  209. extern Menu* pCurrent;
  210.  
  211. extern unsigned char* colmap;
  212. extern unsigned char* debugtex;
  213. extern int ogl_debugtex;
  214. extern int colwidth;
  215.  
  216. extern int dirsX[];
  217. extern int dirsY[];
  218.  
  219. extern float default_speeds[];
  220. extern int default_arena_sizes[];
  221.  
  222. extern int stoptime;
  223. /*
  224. extern int lasttime; 
  225. extern double dt; 
  226. */
  227. /* milliseconds since last frame */
  228.  
  229. extern int polycount;
  230. extern int screenshots;
  231.  
  232. extern float colors_alpha[][4];
  233. extern float colors_trail[][4];
  234. extern float colors_model[][4];
  235. extern int vps;
  236. extern int vp_max[];
  237. extern float vp_x[4][4];
  238. extern float vp_y[4][4];
  239. extern float vp_w[4][4];
  240. extern float vp_h[4][4];
  241. extern unsigned char debugcolors[6][4];
  242. /* configure keys stuff */
  243.  
  244. extern int *configureKeyEntry;
  245. extern Menu *configureKeyMenu;
  246.  
  247. extern callbacks gameCallbacks;
  248. extern callbacks guiCallbacks;
  249. /* extern callbacks chooseModelCallbacks; */
  250. extern callbacks pauseCallbacks;
  251. extern callbacks configureCallbacks;
  252. extern callbacks promptCallbacks;
  253.  
  254. #define KEY_ACTIONS_N 8
  255.  
  256. typedef struct {
  257.   int player;
  258.   int turn;
  259.   int key;
  260. } keyAction;
  261.  
  262. extern keyAction key_actions[];
  263.  
  264. /* function prototypes */
  265. /* TODO: sort these */
  266.  
  267. /* console */
  268. void consoleInit();
  269. void consoleAddLine(char *text);
  270. void consoleDisplay(void(*func)(char *line, int call), int height);
  271. void consoleScrollForward(int range);
  272. void consoleScrollBackward(int range);
  273.  
  274. /* record.c */
  275.  
  276. extern void getEvents();
  277. extern void writeEvent(GameEvent *e);
  278. extern int startRecording(char *filename);
  279. extern void stopRecording();
  280. extern int startPlaying(char *filename);
  281. extern void stopPlaying();
  282.  
  283. /* engine.c */
  284.  
  285. extern void addList(list **l, void *data);
  286. extern int updateTime();
  287. extern int getCol(int x, int y);
  288. extern void turn(Data* data, int direction);
  289. extern void idleGame();
  290. extern void initGame();
  291. extern void exitGame();
  292. extern void initGameStructures();
  293. extern void initGameScreen();
  294. extern void defaultDisplay(int n);
  295. extern void cycleDisplay(int p);
  296. extern void doTrail(line *t, int value);
  297. extern void fixTrails();
  298. extern void clearTrails(Data *data);
  299.  
  300. extern void moveStep(Data* data);
  301. extern void writePosition(int player);
  302.  
  303. extern void doTurn(Data* data, int time);
  304. extern void crashPlayer(int player);
  305. extern void createTurnEvent(int player, int direction);
  306. extern int processEvent(GameEvent *e);
  307.  
  308. /* gltron.c */
  309. /* game.c */
  310. /* gamegraphics.c */
  311.  
  312. extern void initClientData();
  313. extern void initDisplay(gDisplay *d, int type, int p, int onScreen);
  314. extern void changeDisplay();
  315. extern void initModel(Player *p, int p_num);
  316.  
  317. extern void gameMouseMotion(int x, int y);
  318. extern void gameMouse(int buttons, int state, int x, int y);
  319.  
  320. extern void mouseWarp();
  321. extern void initData();
  322. extern void drawGame();
  323. extern void displayGame();
  324. extern void initGLGame();
  325.  
  326. extern void shutdownDisplay(gDisplay *d);
  327. extern void setupDisplay(gDisplay *d);
  328.  
  329. extern int colldetect(float sx, float sy, float ex, float ey, int dir, int *x, int *y);
  330.  
  331. extern int allAI();
  332. extern void setGameIdleFunc(void);
  333. extern void initGlobals(void);
  334. extern int screenSaverCheck(int t);
  335. extern void scaleDownModel(float height, int i);
  336. extern void setMainIdleFunc(void);
  337.  
  338. /* skybox.c */
  339. extern void skybox(void);
  340.  
  341. /* various initializations -> init.c */
  342.  
  343. extern void initFonts();
  344.  
  345. /* texture initializing -> texture.c */
  346.  
  347. extern void initTexture();
  348. extern void deleteTextures();
  349.  
  350. /* texture loading -> load_texture.c */
  351. /* uses sgi_texture.c or sdl_texture.c */
  352. extern void loadTexture(char *filename, int format);
  353.  
  354. /* screenshot.c */
  355. extern void doScreenShot();
  356. extern void doBmpScreenShot();
  357.  
  358. /* help -> character.c */
  359.  
  360. /* extern void drawLines(int, int, char**, int, int); */
  361.  
  362. /* ai -> computer.c */
  363.  
  364. extern void doComputer(int player, int target);
  365. extern void doComputer2(int player, int target);
  366.  
  367. /* keyboard -> input.c */
  368.  
  369. extern void keyGame(int key, int x, int y);
  370. extern void parse_args(int argc, char *argv[]);
  371.  
  372. /* settings -> settings.c */
  373.  
  374. extern void initMainGameSettings();
  375. extern void saveSettings();
  376.  
  377. /* menu -> menu.c */
  378.  
  379. extern void menuAction(Menu* activated, int type);
  380. extern Menu** loadMenuFile(char* filename);
  381. extern void drawMenu(gDisplay *d);
  382. extern void showMenu();
  383. extern void removeMenu();
  384. extern void initMenuCaption(Menu *m);
  385. extern int* getVi(char *szName);
  386. extern float* getVf(char *szName);
  387.  
  388. /* file handling -> file.c */
  389.  
  390. extern char* getFullPath(char *filename);
  391. extern list* readDirectoryContents(char *dirname, char *prefix);
  392. extern char* getMusicPath(char *dirname);
  393.  
  394. /* findpath.c, GPL'd code */
  395. extern void goto_installpath(char *executable);
  396.  
  397. /* callback stuff -> switchCallbacks.c */
  398.  
  399. extern void chooseCallback(char*);
  400. extern void restoreCallbacks();
  401. extern void switchCallbacks(callbacks*);
  402. extern void updateCallbacks();
  403.  
  404. /* probably common graphics stuff -> graphics.c */
  405.  
  406. extern void checkGLError(char *where);
  407. extern void rasonly(gDisplay *d);
  408.  
  409. extern void drawText(fonttex* ftx, int x, int y, int size, char *text);
  410. extern int hsv2rgb(float, float, float, float*, float*, float*);
  411. extern void colorDisc();
  412.  
  413. /* gltron game graphics -> gamegraphics.c */
  414. extern void rebuildDebugTex();
  415. extern void drawDebugLines(gDisplay *d);
  416. extern void drawDebugTex(gDisplay *d);
  417. extern void drawFPS(gDisplay *d);
  418. extern void drawConsole(gDisplay *d);
  419. extern void drawScore(Player *p, gDisplay *d);
  420. extern void drawAI(gDisplay *d);
  421. extern void drawPause(gDisplay *d);
  422. /* extern void drawHelp(gDisplay *d); */
  423. extern void drawFloor(gDisplay *d);
  424. extern void drawPlayers(Player *);
  425. extern void drawWalls(gDisplay *d);
  426. extern void drawCam(Player *p, gDisplay *d);
  427.  
  428. /* trail.c */
  429. /* extern void drawTrails(Player *p, Player *p_eye, gDisplay *d); */
  430. extern void drawTrailBow(Player *p);
  431. extern void drawTrailLines(Player *p);
  432. extern void doTrails(Player *p);
  433. extern void drawTrailShadow(Data *d);
  434. extern void drawTrailQuadBow(Player *p, int *q);
  435. extern void drawTrailsWithQuadBuf(Player *p_eye);
  436. extern float getSegmentUV(line *line);
  437. extern float getSegmentEndUV(line *line, Data *data);
  438. extern float getSegmentEndX(line *line, Data *data, int type);
  439. extern float getSegmentEndY(line *line, Data *data, int type);
  440. extern void checkQuad2D(char *flags, int q, int n);
  441.  
  442. /* clip.c */
  443. int testfrustum(float *x, float *y, float *p, float *a, float *b);
  444.  
  445. /* demo stuff */
  446. /* record.c */
  447. extern int readDemoInfo();
  448. extern int writeDemoInfo();
  449.  
  450. /* engine.c */
  451. extern int applyGameInfo();
  452.  
  453.  
  454. /* pixel stuff */
  455. extern unsigned char* loadPixels(char *filename, gDisplay *d);
  456. extern unsigned char* scalePixels(unsigned char *source, int sw, int sh,
  457.                   int x, int y, int w, int h,
  458.                   int dw, int dh, int bytes);
  459.  
  460. /* font stuff ->fonts.c */
  461. extern void initFonts();
  462. extern void deleteFonts();
  463. extern void resetScores();
  464.  
  465. extern void draw( void );
  466.  
  467. extern void chaseCamMove();
  468. extern void camMove();
  469.  
  470. extern void movePlayers();
  471.  
  472. /* fonttex stuff */
  473. extern void initBitmaps(gDisplay *d);
  474. extern void deleteBitmaps(gDisplay *d);
  475. extern fontbmp* fbmpLoadFont(char *filename);
  476. extern void fbmpUnloadFont(fontbmp *fbmp);
  477. extern texture* loadTextureData(char *filename);
  478. extern void freeTextureData(texture *tex);
  479. extern void drawSoftwareText(fonttex *tex, int x, int y, int size, char *text);
  480. extern void drawSoftwareHighlight(int x, int y, int size, char *text);
  481. extern fonttex *ftxLoadFont(char *filename);
  482. extern void ftxUnloadFont(fonttex *ftx);
  483. extern void loadTexture(char *filename, int format);
  484.  
  485. /* It's not necessary to bind the texture explicitly. */
  486. /* (and we don't know which texture to bind) */
  487.  
  488. /* ftxRenderString will take care of that */
  489. /* extern void ftxBindFontTexture(fontTex *ftx); */
  490.  
  491. extern void ftxRenderString(fonttex *ftx, char *string, int len);
  492.  
  493. /* extern void ftxGetStringWidth(fontTex *ftx, */
  494. /*                               char *string, int len, int *width); */
  495. /* can't get max_ascent, max_descent yet */
  496.  
  497. #endif
  498.  
  499.  
  500.